<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // // 1、函数的本质
        // function fn(){
        //     console.log('fn')
        // }

        // fn()

        // // 2、函数传递参数
        // function fn(a,b){
        //     // 形参赋值  就好比 执行 let a = aa ;let b = bb;
        //     console.log(a,b)
        // }

        // let aa = 10;//栈区有一个空间存储的是10
        // let bb = [1,2,3]//栈区有一个存储空间 存储的是地址 地址对应在堆区中存储的数据(0X222)
        // fn(aa,bb);



        // function fn(a){
        //     console.log(a)
        //     a()
        // }
        // function cb(){
        //     console.log('回调函数');
        // }
        // fn(cb)


        // // 使用匿名作为回调
        // // 将函数的地址赋值给cb变量 所以每次创建函数就得到一个内存地址 注意不是return
        // let cb = function(){

        // }
        // function fn(a){
        //     // let a = 0X111
        //     a();
        // }
        // // function(){console.log(回调)}  得到的就是一个内存地址 例如0X111
        // // fn(0X111)
        // fn(function(){
        //     console.log('回调  匿名函数创建就得到的一个内存地址')
        // })


        // 调用回调并且传递参数
        function fn(cb){
            // 调用函数 传递的是实参
            let options = {total:100,pageSize:10};
            // 传递的options 是一个内存地址
            cb(options) 
        }
        // op变量是形参
        // let op = options
        fn(function(op){
            console.log('op变量的值就是传递过来的option')
            console.log(op)
        })
    </script>
</body>
</html>